Recursos identificados
- APIs:
artifactregistry.googleapis.com,cloudfunctions.googleapis.com,cloudbuild.googleapis.com,eventarc.googleapis.com,run.googleapis.com,logging.googleapis.com,pubsub.googleapis.com. - Cloud Run Functions (gen2):
nodejs-http-function(HTTP)nodejs-storage-function(evento de Cloud Storage)gce-vm-labeler(evento de Cloud Audit Logs)hello-world-colored(HTTP con variable de entorno)slow-function(HTTP, prueba de cold start)slow-concurrent-function(HTTP, min instances y concurrencia)
- Cloud Storage bucket para eventos:
gcf-gen2-storage-<PROJECT_ID>. - IAM bindings:
roles/pubsub.publisherpara la Cloud Storage service account.roles/eventarc.eventReceiverpara la Compute Engine default service account.
- Compute Engine VM de prueba:
instance-1(creacion y borrado para test de Audit Logs). - Cloud Run service revisions (via consola) para pruebas de color, min instances y concurrencia.
Comandos ejecutados
Verificar la cuenta activa en Cloud Shell
Se usa para confirmar con que identidad estas autenticado.
gcloud auth list
Verificar el proyecto activo
Se usa para validar el PROJECT_ID que usara gcloud.
gcloud config list project
Habilitar APIs necesarias del lab
Se usa para activar servicios base de Cloud Run Functions, build, eventos y logs.
gcloud services enable \
artifactregistry.googleapis.com \
cloudfunctions.googleapis.com \
cloudbuild.googleapis.com \
eventarc.googleapis.com \
run.googleapis.com \
logging.googleapis.com \
pubsub.googleapis.com
Habilitar Gemini for Google Cloud API
Se usa para permitir Gemini Code Assist en el entorno del lab.
gcloud services enable cloudaicompanion.googleapis.com
Crear carpeta base de la funcion HTTP
Se usa para inicializar el directorio de trabajo y entrar en el.
mkdir ~/hello-http && cd $_
Crear archivo de codigo de la funcion HTTP
Se usa para crear index.js.
touch index.js
Crear manifiesto de dependencias de la funcion HTTP
Se usa para crear package.json.
touch package.json
Desplegar funcion HTTP en Cloud Run Functions (gen2)
Se usa para publicar la funcion nodejs-http-function.
gcloud functions deploy nodejs-http-function \
--gen2 \
--runtime nodejs22 \
--entry-point helloWorld \
--source . \
--region {{{project_0.default_region|Region}}} \
--trigger-http \
--timeout 600s \
--max-instances 1
Probar la funcion HTTP desplegada
Se usa para invocar la funcion y validar la respuesta.
gcloud functions call nodejs-http-function \
--gen2 \
--region {{{project_0.default_region|Region}}}
Obtener el numero de proyecto
Se usa para guardar el PROJECT_NUMBER en una variable.
PROJECT_NUMBER=$(gcloud projects list --filter="project_id:{{{ project_0.project_id | PROJECT_ID }}}" --format='value(project_number)')
Obtener service account de Cloud Storage para KMS
Se usa para guardar la cuenta de servicio requerida en una variable.
SERVICE_ACCOUNT=$(gsutil kms serviceaccount -p $PROJECT_NUMBER)
Asignar rol pubsub.publisher a Cloud Storage
Se usa para permitir que eventos de Cloud Storage publiquen en Pub/Sub.
gcloud projects add-iam-policy-binding {{{ project_0.project_id | PROJECT_ID }}} \
--member serviceAccount:$SERVICE_ACCOUNT \
--role roles/pubsub.publisher
Crear carpeta base de la funcion de Cloud Storage
Se usa para inicializar el directorio de trabajo y entrar en el.
mkdir ~/hello-storage && cd $_
Crear archivo de codigo de la funcion de Cloud Storage
Se usa para crear index.js.
touch index.js
Crear manifiesto de dependencias de la funcion de Cloud Storage
Se usa para crear package.json.
touch package.json
Definir nombre del bucket en variable
Se usa para reutilizar el bucket en comandos posteriores.
BUCKET="gs://gcf-gen2-storage-{{{ project_0.project_id | PROJECT_ID }}}"
Crear bucket de Cloud Storage
Se usa para generar eventos que disparen la funcion.
gsutil mb -l {{{project_0.default_region|Region}}} $BUCKET
Desplegar funcion disparada por bucket
Se usa para publicar nodejs-storage-function con trigger de Cloud Storage.
gcloud functions deploy nodejs-storage-function \
--gen2 \
--runtime nodejs22 \
--entry-point helloStorage \
--source . \
--region {{{project_0.default_region|Region}}} \
--trigger-bucket $BUCKET \
--trigger-location {{{project_0.default_region|Region}}} \
--max-instances 1
Crear archivo de prueba local
Se usa para tener un objeto a subir al bucket.
echo "Hello World" > random.txt
Subir archivo al bucket
Se usa para disparar el evento de Cloud Storage.
gsutil cp random.txt $BUCKET/random.txt
Leer logs de la funcion de Cloud Storage
Se usa para confirmar que la funcion recibio el CloudEvent.
gcloud functions logs read nodejs-storage-function \
--region {{{project_0.default_region|Region}}} \
--gen2 \
--limit=100 \
--format "value(log)"
Asignar rol eventarc.eventReceiver a Compute Engine default SA
Se usa para habilitar recepcion de eventos de Audit Logs via Eventarc.
gcloud projects add-iam-policy-binding {{{ project_0.project_id | PROJECT_ID }}} \
--member serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \
--role roles/eventarc.eventReceiver
Ir al home de Cloud Shell
Se usa para posicionarse donde se clonara el repositorio.
cd ~
Clonar repositorio de ejemplo de Eventarc
Se usa para obtener el codigo de gce-vm-labeler.
git clone https://github.com/GoogleCloudPlatform/eventarc-samples.git
Entrar al directorio del ejemplo nodejs
Se usa para desplegar desde el path correcto.
cd ~/eventarc-samples/gce-vm-labeler/gcf/nodejs
Desplegar funcion basada en Cloud Audit Logs
Se usa para etiquetar VMs creadas segun filtros de evento.
gcloud functions deploy gce-vm-labeler \
--gen2 \
--runtime nodejs22 \
--entry-point labelVmCreation \
--source . \
--region {{{project_0.default_region|Region}}} \
--trigger-event-filters="type=google.cloud.audit.log.v1.written,serviceName=compute.googleapis.com,methodName=beta.compute.instances.insert" \
--trigger-location {{{project_0.default_region|Region}}} \
--max-instances 1
Describir VM para verificar etiqueta creator
Se usa para comprobar que la funcion aplico labels.
gcloud compute instances describe instance-1 --zone {{{project_0.default_zone | "Zone"}}}
Eliminar VM de prueba
Se usa para limpieza de recursos.
gcloud compute instances delete instance-1 --zone {{{project_0.default_zone | "Zone"}}}
Crear carpeta base para funcion con revisiones
Se usa para preparar proyecto Python.
mkdir ~/hello-world-colored && cd $_
Crear codigo de funcion Python
Se usa para crear main.py.
touch main.py
Crear archivo de dependencias Python
Se usa para crear requirements.txt.
touch requirements.txt
Definir variable de color inicial
Se usa para pasarla como env var en el deploy.
COLOR=orange
Desplegar revision inicial de funcion coloreada
Se usa para publicar hello-world-colored con color naranja.
gcloud functions deploy hello-world-colored \
--gen2 \
--runtime python311 \
--entry-point hello_world \
--source . \
--region {{{project_0.default_region|Region}}} \
--trigger-http \
--allow-unauthenticated \
--update-env-vars COLOR=$COLOR \
--max-instances 1
Crear carpeta base para prueba de cold start
Se usa para preparar proyecto Go.
mkdir ~/min-instances && cd $_
Crear codigo de funcion Go
Se usa para crear main.go.
touch main.go
Crear modulo Go
Se usa para crear go.mod.
touch go.mod
Desplegar funcion lenta sin min instances
Se usa para observar cold start inicial.
gcloud functions deploy slow-function \
--gen2 \
--runtime go123 \
--entry-point HelloWorld \
--source . \
--region {{{project_0.default_region|Region}}} \
--trigger-http \
--allow-unauthenticated \
--max-instances 4
Primera invocacion de la funcion lenta
Se usa para medir latencia con cold start.
gcloud functions call slow-function \
--gen2 \
--region {{{project_0.default_region|Region}}}
Segunda invocacion de la funcion lenta
Se usa para comparar latencia posterior al warm-up.
gcloud functions call slow-function \
--gen2 \
--region {{{project_0.default_region|Region}}}
Instalar herramienta de carga hey
Se usa para enviar requests concurrentes.
sudo apt install hey
Obtener URL de la funcion lenta
Se usa para guardarla en SLOW_URL.
SLOW_URL=$(gcloud functions describe slow-function --region {{{project_0.default_region|Region}}} --gen2 --format="value(serviceConfig.uri)")
Ejecutar prueba de concurrencia sin ajuste de concurrency
Se usa para observar tiempos altos por escalado/cold start.
hey -n 10 -c 10 $SLOW_URL
Eliminar servicio slow-function
Se usa para limpiar antes del siguiente despliegue.
gcloud run services delete slow-function --region {{{project_0.default_region | "Region"}}}
Desplegar funcion con min instances para prueba de concurrency
Se usa para publicar slow-concurrent-function.
gcloud functions deploy slow-concurrent-function \
--gen2 \
--runtime go123 \
--entry-point HelloWorld \
--source . \
--region {{{project_0.default_region|Region}}} \
--trigger-http \
--allow-unauthenticated \
--min-instances 1 \
--max-instances 4
Obtener URL de la funcion concurrente
Se usa para guardarla en SLOW_CONCURRENT_URL.
SLOW_CONCURRENT_URL=$(gcloud functions describe slow-concurrent-function --region {{{project_0.default_region|Region}}} --gen2 --format="value(serviceConfig.uri)")
Ejecutar prueba de concurrencia con servicio ajustado
Se usa para validar mejora de tiempos con concurrencia alta.
hey -n 10 -c 10 $SLOW_CONCURRENT_URL